文章每周六持续更新,可以微信搜一搜「 荒古传说 」抢先阅读。
在正式开始总结MySQL之前,先给大家介绍一下“破壁”是什么意思,很久之前我老大曾说过一句 “互联网本来没有什么行业壁垒,但是通过制造一些专业名词,人为的制造了很多行业壁垒出来”,我深以为然。
计算机的本质是0和1,之后通过层层封装、抽象构建出了我们今天看到的互联网世界。
我不否认计算机中难度很高的知识,但是就我目前接触到的知识来说还没有到那种程度,我想这种可以称之为行业壁垒的核心知识占总知识量的0.01%都不到,绝大多数人一生都不会遇到这些问题。
那么剩下的就是这一个一个人为制造的、可以通过花时间掌握的“行业壁垒”。
破壁的意思就是打破这些人为制造的“行业壁垒”,让我们技术人员人人如龙。
破壁系列的第一个专题我选择了互联网的数据存储基石 - MySQL。
这个专题将会总结事务、索引、SQL性能优化、分库分表、主从复制等MySQL核心内容。详情参见下面的思维导图:
MySQL 是什么
MySQL 是一个免费、开源的关系型数据库管理软件,在互联网行业被广泛使用。
MySQL 架构
MySQL中插件式存储引擎架构一直是其非常有特色的亮点,其灵活的处理方式,高度可定制化及完全开放的实现一直被很多高级用户所肯定,下图是官方文档中的一张架构图:
连接层:这一层主要是提供授权认证、连接处理等功能。
- 在该层上引入了线程池的概念,为通过安全认证的客户端请求提供线程。
- 在该层上也可以实现基于SSL的安全链接。
- 该层会为通过授权认证的客户端请求分配相应的权限。
服务层:这一层实现了很多核心功能,像查询解析、分析、优化、缓存、以及内置函数的实现等,所有跨存储引擎的功能也都在这一层实现,像触发器、存储过程、视图等。
引擎层:存储引擎负责的是MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。MySQL中插件式存储引擎架构的特点,使得我们可以根据自己的实际需要进行存储引擎的选取。
存储层:将数据存储在文件系统上。
常见面试题:
MySQL 的查询流程具体是?or 一条 SQL 语句在 MySQL 中如何执行的?
介绍一下 MySQL 的架构
- 客户发起请求。
- 在连接层进行权限校验、线程分配。
- 查询缓存(存在缓存则直接返回,不存在则执行后续操作)
- 分析器(对SQL进行词法分析和语法分析操作)
- 优化器(主要对执行的sql优化选择最优的执行方案方法)
- 执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口)
- 去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)
MySQL 存储引擎
MySQL中采用的是插件式存储引擎架构,可以根据需要选择不同的存储引擎。
现在互联网普遍使用的都是 InnoDB 存储引擎,常见的面试题是 InnoDB 存储引擎和 MyISAM 存储的对比,比如像下面这样问:
Innodb 和 MyISAM 的区别是什么?
可以从如下的角度进行回答:
- 事务:InnoDB 支持事务,MyISAM 不支持事务
- 锁:InnoDB 支持行级锁,MyISAM 只支持表级锁
- 外键:InnoDB 支持外键
- InnoDB 支持在线热备份
- MyISAM 支持空间索引
小结
MySQL 是现在互联网大小厂主流使用的关系型数据库管理软件,平时工作中也是围绕着它进行开发,所以几乎是面试必考题。
这篇文章是《破壁》系列,第一个专题的第一篇文章,下面是本系列的其他文章,欢迎阅读~
文章中首先介绍了一下我接下来要写的内容(第一个专题 MySQL),其次是从技术原理和面试题两个角度介绍了 MySQL 架构和 MySQL 存储引擎。
参考资料
文章每周六持续更新,可以微信搜一搜「 荒古传说 」抢先阅读。